package com.atguigu.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * @author 伟哥
 * @date 2021-05-07 16:19
 *
 * RequestMapping的属性：value【默认值】
 *      标注在类上，就是为当前类的所有方法，指定一个【基准路径】：所有的方法请求，都要在这个基准路径下，才会被拦截
 *      标注在方法上，提供进一步的细分映射信息。相对于类定义出的URL。若类定义处未标注@RequestMapping，则方法标记处的URL相对于WEB应用的根目录
 */
@RequestMapping("/haha")
@Controller
public class RequestMappingTestController {

    @RequestMapping("/handle01")
    public String handle01(){
        System.out.println("RequestMappingTestController的...handle01处理请求...");
        return "success";
    }

    /**
     * RequestMapping的其他属性
     *      method：限定【请求方式】：
     *          HTTP：规定的请求方式：
     *              【GET】, HEAD, 【POST】, PUT, PATCH, DELETE, OPTIONS, TRACE
     *          【默认：全部请求都接收】
     *
     *           method = RequestMethod.GET：只接收这种类型的请求。
     *              不是规定的方式，就会报错！4xx：都是客户端错误
     *                  405 - RequestMethod method= 'GET' not supported
     *              ·将请求改为POST形式src/main/webapp/index.jsp
     *
     *      params：规定【请求参数】
     *          params 和 headers支持简单的表达式：
     *              param1: 表示请求【必须包含】名为 param1 的请求参数
     *                  params ={"userName"}请求必须包含名为 userName 的请求参数
     *                      不带包含的参数请求，直接报错400！
     *                      带上包含的参数请求，成功
     *              !param1: 表示请求【不能包含】名为 param1 的请求参数
     *                  params ={"userName"}请求必须包含名为 userName 的请求参数
     *                      带上包含的参数请求，直接报错400！
     *                      不带包含的参数请求，成功
     *              param1 != value1: 表示请求包含名为 param1 的请求参数，但其值不能为 value1
     *                  params ={"!userName!=123"}，请求参数可以包含 userName，但是其值不能为123
     *                      请求参数中不携带 userName，那么userName是null，成功！
     *                      请求参数中包含 userName，但是不给userName赋值，例如：?userName=，此时userName是空串，成功！
     *                      请求参数中包含 userName，值是123，报错！
     *                      请求参数中包含 userName，值不是123，成功！
     *              {“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2 的两个请求参数，且 param1 参数的值必须为 value1
     *                  params ={"userName!=123","pwd","!age"}
     *                  请求参数可以包含 userName，但是其值不能为123、请求参数【必须包含】pwd、请求参数不能携带age
     *
     *      headers：规定【请求头】
     *          也和params一样支持简单的表达式：
     *
     *      consumes：只接受内容类型是哪种的请求。规定请求头中的Content-Type
     *      produces：告诉浏览器返回的内容类型是什么，给响应头中加上Content-Type:text/html;charset=utf-8
     *
     */
    @RequestMapping(value = "/handle02",method = RequestMethod.POST)
    public String handle02(){
        System.out.println("RequestMappingTestController的...handle02处理请求...");
        return "success";
    }

    @RequestMapping(value = "/handle03",params ={"userName!=123","pwd","!age"} )
    public String handle03(){
        System.out.println("RequestMappingTestController的...handle03处理请求...");
        return "success";
    }

    /**
     * 请求头中有浏览器信息：User-Agent
     *
     *      让谷歌浏览器不能访问
     *
     *      谷歌：User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
     * @return
     */
    @RequestMapping(value = "/handle04",headers = "User-Agent!=Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36")
    public String handle04(){
        System.out.println("RequestMappingTestController的...handle04处理请求...");
        return "success";
    }

}
